package com.ruoyi.psi.sale.salereturn.mapper;


import com.ruoyi.psi.base.product.domain.ProduceCheck;
import com.ruoyi.psi.sale.salereturn.domain.SaleReturn;
import com.ruoyi.psi.sale.salereturn.domain.SaleReturnList;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 销售退回
 * 数据层
 */
public interface SaleReturnMapper {
    /**
     * 销售订单退货查询
     * @param saleReturn
     * @return
     */
    public List<SaleReturn> selectSaleReturnList(SaleReturn saleReturn);

    /**
     * 按编号查询
     * @param saleReturnId 销售订单退货编号
     * @return
     */
    public SaleReturn selectSaleReturnById(String saleReturnId);
    /**
     * 获取最新的一条销售退货编号
     * @return
     */
    public String getSaleReturnId();

    /**
     * 销售订单退货新增
     * @param saleReturn
     * @return
     */
    public int insertSaleReturn(SaleReturn saleReturn);

    /**
     * 销售订单退货更新
     * @param saleReturn
     * @return
     */
    public int updateSaleReturn(SaleReturn saleReturn);

    /**
     * 更新销售订单退货删除标志位
     * @param saleReturn
     * @return
     */
    public int updateSaleReturnDeleteFlag(SaleReturn saleReturn);

    /**
     * 更新审批状态
     * @param saleReturnId
     * @return
     */
    int completeApprovalFlag(String saleReturnId);

    /**
     * 拒绝审批状态
     * @param saleReturnId
     * @return
     */
    int refuseApprovalFlag(String saleReturnId);

    /**
     * 销售订单退货详细查询
     * @param saleReturnList
     * @return
     */
    public List<SaleReturnList> selectSaleReturnListList(SaleReturnList saleReturnList);

    /**
     * 查询销售订单退货对应的所有产品详细
     * @param saleReturnId 销售订单退货编号
     * @return
     */
    public List<SaleReturnList> selectSaleReturnListListById(String saleReturnId);

    /**
     * 查询销售订单退货对应的指定产品详细
     * @param saleReturnId
     * @return
     */
    public SaleReturnList  selectSaleReturnListById(@Param("saleReturnId")String saleReturnId, @Param("produceId")String produceId);

    /**
     * 销售订单退货详细新增
     * @param saleReturnList
     * @return
     */
    public int insertSaleReturnList(SaleReturnList saleReturnList);

    /**
     * 销售订单退货详细更新
     * @param saleReturnList
     * @return
     */
    public int updateSaleReturnList(SaleReturnList saleReturnList);

    /**
     * 删除销售订单退货详细
     * @param saleReturnId  销售订单退货编号
     * @param produceId 产品编号
     * @return
     */
    public int deleteSaleReturnListById(@Param("saleReturnId")String saleReturnId, @Param("produceId")String produceId);

    /**
     * 新增销售订单退货时，获取对应的销售出库详细
     * @param saleDeliveryId 销售订单出库编号
     * @return
     */
    public List<SaleReturnList> getSaleDeliveryListForReturn(String saleDeliveryId);

    /**
     * 获取指定产品销售退货数量
     * @param produceCheck
     * @return
     */
    public Double getSaleReturnProduceNum(ProduceCheck produceCheck);
}
